// https://leetcode.cn/problems/two-sum/
// 描述：
// 给定一个整数数组 nums 和一个目标值 target，请你返回两个加起来等于目标值的数字索引。
//法一：  暴力解法（嵌套循环） 时间复杂度 O(n^2) 空间复杂度 O(1)
// 遍历数组中的每个元素 nums[i]，然后再遍历一次剩下的元素 nums[j]，判断
function twoSum(nums, target) {
for (let i = 0; i < nums.length; i++) {
    for (let j = i + 1; j < nums.length; j++) {
        if (nums[i] + nums[j] === target) {
            console.log([i, j]);
            break;
        }
    }
}
}
// 法二：使用 Map 存储元素及其索引 时间复杂度 O(n) 空间复杂度 O(n)[加法转化为减法]
// 遍历数组时，将每个元素及其索引存入 Map 中，然后在遍历过程中检查是否存在与当前元素相加等于目标值的另一个元素。
function twoSum(nums, target) {
  const map = new Map(); // 存储：值 => 索引
  for (let i = 0; i < nums.length; i++) {
    const complement = target - nums[i];
    if (map.has(complement)) {
      return [map.get(complement), i];
    }
    map.set(nums[i], i);
  }
}
 